package gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import business.SeanceBL;

public class SeanceUI extends JPanel {
	
	private int seanceId, serviceId, periodeId;
	private PeriodeUI periode;
	private JLabel nomLabel, salleLabel, profLabel;
	
	private AbstractPopupController popupController = new AbstractPopupController() {
		public JPopupMenu makePopup(int x, int y) {
			return new Popup();
		}
	};
	
	public SeanceUI(PeriodeUI periode, int seanId, Color color, String nom, String type, String prof, String promo, String groupe, String salle) {
		
		this.periode = periode;
		
		/* TODO Deplacer dans le controleur */
		if (seanId > 0) {
			seanceId = seanId;
			
			SeanceBL seanceBL = new SeanceBL(seanceId);
			serviceId = seanceBL.getIdService();
			periodeId = seanceBL.getIdPeriode();
			
			this.addMouseListener(popupController);
		}
		
		this.setLayout(new GridLayout(3,0));
		
		nomLabel = new JLabel(nom); nomLabel.setHorizontalAlignment(SwingConstants.CENTER); add(nomLabel);
		salleLabel = new JLabel(salle); salleLabel.setHorizontalAlignment(SwingConstants.CENTER); add(salleLabel);
		profLabel = new JLabel(prof); profLabel.setHorizontalAlignment(SwingConstants.CENTER); add(profLabel);
		
		setColor(color);
		this.setToolTipText(type + "\n" + promo + (groupe.isEmpty() ? "" : (" grp." + groupe)));
	}

	public void setColor(Color color) {
		
		/* Arriere-plan */
		this.setBorder(new RoundedBorder(10, color));
		
		/* Si l'arriere-plan est trop fonce, afficher le texte en blanc */
		Color textColor = Color.BLACK;
		
		if ((color.getRed() + color.getGreen() + color.getBlue()) < 512) {
			textColor = Color.WHITE;
		}
		
		nomLabel.setForeground(textColor);
		salleLabel.setForeground(textColor);
		profLabel.setForeground(textColor);
	}
	
	public int getPeriodeId() {
		SeanceBL seanceBL = new SeanceBL(seanceId);
		return seanceBL.getIdPeriode();
	}
	
	private class Popup extends JPopupMenu implements ActionListener {
		JMenuItem modifier = new JMenuItem("Modifier");
		JMenuItem supprimer = new JMenuItem("Supprimer");
		
		public Popup() {
			modifier.addActionListener(this);
			supprimer.addActionListener(this);
			add(modifier);
			add(supprimer);
		}
		
		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == modifier) {
				FrameAjoutSeance frameAjout = new FrameAjoutSeance(periode.getSemaine(), seanceId, serviceId, periodeId, true);
				frameAjout.setVisible(true);
			} else if (e.getSource() == supprimer) {
				int retour = JOptionPane.showConfirmDialog(
					    this,
					    "Êtes vous sûr de vouloir supprimer la séance\n"+
					    //ensBL.getName()+" "+ensBL.getPrenom()+
					    " ?",
					    "Avertissement",
					    JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
				if (retour == JOptionPane.YES_OPTION) {
					SeanceBL seanceBL = new SeanceBL(seanceId);
					seanceBL.supprimerSeance();
					
					/* Mettre a jour l'affichage de la periode */
					periode.getSemaine().load();
				}

			}
			
		}
		
	}
	
}
